package com.itheima.reggie.common;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class}) // 处理加了这两个注解的类
@ResponseBody  // 可能需要返回JSON数据
@Slf4j // 开启日志
public class GlobalExceptionHandler {

    /**
     * name重复异常处理方法
     * @return
     */
    @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
    public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex){
        log.error(ex.getMessage());
        if (ex.getMessage().contains("Duplicate entry")){
            String[] split = ex.getMessage().split(" "); // 错误码按空格进行分隔,存到一个字符数组中
            String msg = split[2] + "已存在"; // 拿到数组中2号索引的位置,代表出现错误的数据库表头字段
            return R.error(msg);
        }
        return R.error("未知错误"); // 如果没出现上类错误,则提示未知错误
    }


    /**
     * 删除分类关联菜品或者套餐异常处理方法,   菜品分类或者套餐包含了菜品删除失败
     * @return
     */
    @ExceptionHandler(CustomException.class)
    public R<String> exceptionHandler(CustomException ex){
        log.error(ex.getMessage());
        // 抛出提示信息给前端
       return R.error(ex.getMessage());
    }
}
